#!/bin/bash

# 部署脚本 - 将应用部署到远程服务器
# 使用方法: ./deploy.sh [服务器IP] [用户名] [SSH端口]

SERVER_IP=${1:-121.37.16.85}
USERNAME=${2:-dell}
SSH_PORT=${3:-6108}
APP_NAME="warp-knitting-monitor"
REMOTE_DIR="/opt/$APP_NAME"

echo "开始部署应用到服务器: $SERVER_IP (端口: $SSH_PORT)"
echo "=================================="

# 1. 递增版本号并构建应用
echo "1. 递增版本号并构建应用..."
./version.sh
./mvnw clean package -DskipTests
if [ $? -ne 0 ]; then
    echo "构建失败，退出部署"
    exit 1
fi

# 2. 创建部署包
echo "2. 创建部署包..."
DEPLOY_DIR="deploy"
rm -rf $DEPLOY_DIR
mkdir -p $DEPLOY_DIR

# 复制必要文件
cp target/demo-0.0.1-SNAPSHOT.jar $DEPLOY_DIR/
cp src/main/resources/application-prod.yml $DEPLOY_DIR/
cp Dockerfile $DEPLOY_DIR/
cp docker-compose.yml $DEPLOY_DIR/
cp start.sh $DEPLOY_DIR/
cp stop.sh $DEPLOY_DIR/
cp restart.sh $DEPLOY_DIR/

# 创建启动脚本
cat > $DEPLOY_DIR/start-app.sh << 'EOF'
#!/bin/bash
cd /opt/warp-knitting-monitor
java -Xms512m -Xmx1024m -XX:+UseG1GC \
     -jar demo-0.0.1-SNAPSHOT.jar \
     --spring.profiles.active=prod \
     --server.port=8090 > app.log 2>&1 &
echo $! > app.pid
echo "应用已启动，PID: $(cat app.pid)"
EOF

chmod +x $DEPLOY_DIR/start-app.sh

# 3. 上传到服务器
echo "3. 上传文件到服务器..."
ssh -p $SSH_PORT $USERNAME@$SERVER_IP "mkdir -p $REMOTE_DIR"
scp -P $SSH_PORT -r $DEPLOY_DIR/* $USERNAME@$SERVER_IP:$REMOTE_DIR/

# 4. 在服务器上部署
echo "4. 在服务器上部署应用..."
ssh -p $SSH_PORT $USERNAME@$SERVER_IP << EOF
    cd $REMOTE_DIR
    
    # 停止现有应用
    if [ -f app.pid ]; then
        echo "停止现有应用..."
        kill \$(cat app.pid) 2>/dev/null || true
        rm -f app.pid
    fi
    
    # 创建日志目录
    mkdir -p logs
    
    # 启动应用
    echo "启动应用..."
    chmod +x start-app.sh
    ./start-app.sh
    
    # 等待应用启动
    echo "等待应用启动..."
    sleep 10
    
    # 检查应用状态
    if curl -s http://localhost:8090/api/monitor/dashboard/machines > /dev/null; then
        echo "应用启动成功！"
        echo "访问地址: http://$SERVER_IP:8090"
    else
        echo "应用启动失败，请检查日志"
        tail -20 app.log
    fi
EOF

# 5. 清理本地文件
echo "5. 清理本地文件..."
rm -rf $DEPLOY_DIR

echo "部署完成！"
echo "应用访问地址: http://$SERVER_IP:8090"
echo "日志查看: ssh -p $SSH_PORT $USERNAME@$SERVER_IP 'tail -f $REMOTE_DIR/app.log'" 